package com.example.spring_blog_24_9_8.config;

import com.example.spring_blog_24_9_8.model.Result;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

    @ControllerAdvice
    public class ResponseAdvice implements ResponseBodyAdvice {
       //哪个接口执行统一结果返回
        @Override
        public boolean supports(MethodParameter returnType, Class converterType) {
            return true;
      }

        @SneakyThrows
        @Override
        //统一结果返回的具体逻辑
        public Object beforeBodyWrite(Object body, MethodParameter returnType,
                      MediaType selectedContentType, Class selectedConverterType,
                       ServerHttpRequest request, ServerHttpResponse response) {
               if (body instanceof Result){
                       return body;
                }
                 //对String 类型单独处理
                if (body instanceof String){
                    ObjectMapper mapper = new ObjectMapper();
                    return mapper.writeValueAsString(Result.success(body));
                }
                return Result.success(body);
            }
    }